package controllers

import (
	"go-jhb-admin-api/app/models"
	"go-jhb-admin-api/app/utils"

	"github.com/gin-gonic/gin"
)

// 获取管理员列表
func GetAdminList(c *gin.Context) {

	var data struct {
		Page  int    `form:"page" binding:"required"`
		Limit int    `form:"limit" binding:"required"`
		Name  string `form:"name"`
	}

	// 绑定请求参数到结构体
	if err := c.ShouldBind(&data); err != nil {
		utils.ErrorResponse(c, nil, "参数错误")
		return
	}

	// 动态查询条件
	filters := make(map[string]interface{})
	if data.Name != "" {
		filters["name"] = data.Name
	}

	// 获取管理员列表和总记录数
	var admin models.Admin
	admins, total, totalPage, currentPage, err := admin.GetAdmins(data.Page, data.Limit, filters)
	if err != nil {
		utils.ErrorResponse(c, nil, "查询失败")
		return
	}

	// 返回分页结果
	utils.SuccessResponse(c, gin.H{
		"admins":      admins,
		"total":       total,
		"totalPage":   totalPage,
		"currentPage": currentPage,
	})
}

// 获取某个管理员详情
func GetAdminById(c *gin.Context) {

	var data struct {
		Id uint `form:"id" binding:"required"`
	}

	// 绑定请求参数到结构体
	if err := c.ShouldBind(&data); err != nil {
		utils.ErrorResponse(c, nil, "参数错误")
		return
	}

	// idInt, err := strconv.Atoi(id)  // 将字符串转换为整数

	// 转换uint类型
	// idUint, err := strconv.ParseUint(id, 10, 0)

	// if err != nil {
	// 	// 处理转换错误
	// 	utils.ErrorResponse(c, nil, "参数错误")
	// 	return
	// }

	var admin models.Admin

	if getErr := admin.GetByID(data.Id); getErr != nil {
		utils.ErrorResponse(c, nil, "获取失败,"+getErr.Error())
		return
	}

	utils.SuccessResponse(c, admin)

}

// 编辑/添加 管理员
func AddOrUpdateAdmin(c *gin.Context) {

	var adminData struct {
		ID       uint   `form:"id"`
		Account  string `form:"account" binding:"required"`
		Password string `form:"password"`
		Name     string `form:"name"`
		Status   uint8  `form:"status"`
		Roles    string `form:"roles"`
	}

	// 绑定请求参数到结构体
	if err := c.ShouldBind(&adminData); err != nil {
		utils.ErrorResponse(c, nil, "参数错误")
		return
	}

	admin := models.Admin{
		ID:       adminData.ID,
		Account:  adminData.Account,
		Password: adminData.Password,
		Name:     adminData.Name,
		Status:   adminData.Status,
		Roles:    adminData.Roles,
	}

	if err := admin.AddOrUpdateAdmin(); err != nil {
		utils.ErrorResponse(c, nil, err.Error())
		return
	}

	utils.SuccessResponse(c, nil, "操作成功")
}

// 删除管理员
func DeleteAdmin(c *gin.Context) {

	var data struct {
		ID uint `form:"id" binding:"required"`
	}

	// 绑定请求参数到结构体
	if err := c.ShouldBind(&data); err != nil {
		utils.ErrorResponse(c, nil, "参数错误")
		return
	}

	if data.ID == 0 {
		utils.ErrorResponse(c, nil, "参数错误")
		return
	}

	if data.ID == 1 {
		utils.ErrorResponse(c, nil, "无法删除超级管理员")
		return
	}

	if err := models.DeleteAdmin(data.ID); err != nil {
		utils.ErrorResponse(c, nil, err.Error())
		return
	}

	utils.SuccessResponse(c, nil, "操作成功")
}
